// 公共头文件
#pragma once
#include <iostream>
#include <string>
#include <unordered_map>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
using std::cout;
using std::endl;
using std::string;

// 监听队列的长度
const int QUEUE_LISTEN = 20;
// 应用层缓冲区大小
const int BUFFER_NUM = 1024;
// epoll_create大小
const int EPOLL_CREATE_NUM = 200;
// epoll_wait大小
const int EPOLL_WAIT_NUM = 1024;
// timeout时间
const int TIMEOUT = 1000;
// 线程数量
const int PID_NUM = 4;



// 声明sock
class Sock;
// 声明epoll
class Epoll;
// 声明自定义缓冲区
struct Data_buffer;
// 设置sock非阻塞
bool setblock(int sock);
// 读取事件操作
void Recv(std::unordered_map<int, Data_buffer *> *buffer, const epoll_event events);
// 写事件操作
void Write(std::unordered_map<int, Data_buffer *> *buffer, const epoll_event events);
// 处理事件操作
void Handle(int num, std::unordered_map<int, Data_buffer *> *buffer, const epoll_event *events);
// 声明accept
void Accept(const typename std::unordered_map<int, Data_buffer *>::iterator &it, std::unordered_map<int, Data_buffer *> *buffer);
